home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 111_01 / squeezer.doc < prev    next >
Text File  |  1985-08-19  |  24KB  |  598 lines

  1.             ============
  2.             SQUEEZER.DOC
  3.             ============
  4.               7/18/81
  5.  
  6. USAGE AND RECOMPILATION DOCUMENTATION FOR:
  7.  
  8.     SQ.COM,  Ver 1.3: File squeezer
  9.     USQ.COM, Ver 1.4: File unsqueezer
  10.     FLS.COM, Ver 1.1: Ambiguous file name expander
  11.  
  12. --------------------
  13. DISTRIBUTION RIGHTS:
  14. --------------------
  15. I   allow  unrestricted  non-profit  distribution  of   this
  16. software, and invite  users' groups  to  spread  it  around.
  17. However,  any distribution for profit requires my permission
  18. in  advance.  This applies only to the above listed programs
  19. and their program source and documentation files.  I do sell
  20. other software.
  21.  
  22. --------
  23. PURPOSE:
  24. --------
  25. The file squeezer,  SQ, compresses files into a more compact
  26. form.  This provides:
  27.      1.   Faster transmission by modem.
  28.      2.   Fewer diskettes to distribute a program  package.
  29.           (Include USQ.COM and instructions, both unsqueezed.)
  30.      3.   Fewer diskettes for archival storage.
  31.  
  32. Any file can be squeezed,  but program source files and text
  33. files  benefit the most,  typically shrinking by 35%.  Files
  34. containing only a limited character set,  such as dictionary
  35. files,  may shrink as much as 48%.  Squeezed files look like
  36. gibbersh and must be unsqueezed before they can be used.
  37.  
  38. The  unsqueezer,  USQ,  expands  squeezed files  into  exact
  39. duplicates  of the original or provides a quick,  unsqueezed
  40. display  of  the  tops  of  (or  all  of)  squeezed   files.
  41. Unsqueezing requires only a single pass.
  42.  
  43. Both SQ and USQ accept batches of work specified by lists of
  44. file  names  (with  drives  if  needed)  and   miscellaneous
  45. options. They accept these parameters in any of three ways:
  46.  
  47.      1. On the CP/M command line.
  48.      2. From the console keyboard.
  49.      3. From a file.
  50.  
  51. The  FLS program can be used (on the same command line!)  to
  52. expand parameter lists containing wild-card (ambiguous) file
  53. names into lists with the specific file names required by SQ
  54. and USQ.
  55.  
  56. This  combination of programs allows you to issue  a  single
  57. command which will produce many squeezed or unsqueezed files
  58. from and to various diskettes. For example, to unsqueeze all
  59. squeezed  ASM files on drive B and send the results to drive
  60. C  and also unsqueeze all squeezed TXT files on drive A  and
  61. send the results to drive D:
  62.      A>fls c: b:*.aqm d: *.tqt |usq
  63. For detailed instructions see USAGE.
  64. This  DOES  run under plain old vanilla CP/M!  Many  of  the
  65. smarts  are buried in the COM files in the form  of  library
  66. routines  provided  with the BDS C package  (available  from
  67. Lifeboat).
  68.  
  69. The  above example simulates a "pipe" (indicated by the "|")
  70. by sending the "console" output of the fls.com program to  a
  71. temporary  file  and  then running the sq.com  program  with
  72. options  which  cause  it to read its  parameters  from  its
  73. "console" input, which is really redirected to come from the
  74. temporary file.
  75.  
  76. -------
  77. THEORY:
  78. -------
  79. The  data  in the file is treated at the byte  level  rather
  80. then  the word level,  and can contain absolutely  anything.
  81. The compression is in two stages: first repeated byte values
  82. are  compressed  and  then a  Huffman  code  is  dynamically
  83. generated  to match the properties of each particular  file.
  84. This requires two passes over the source data.
  85.  
  86. The  decoding  table is included in the  squeezed  file,  so
  87. squeezing  short  files can actually  lengthen  them.  Fixed
  88. decoding  tables  are not used because  English and  various
  89. computer  languages vary greatly as to upper and lower  case
  90. proportions  and  use of special  characters.  Much  of  the
  91. savings  comes  from  not  assigning codes  to  unused  byte
  92. values.
  93.  
  94. More detailed comments are included in the source files.
  95.  
  96. ---------------
  97. USAGE TUTORIAL:
  98. ---------------
  99. As usual, you have to learn how to tell the programs what to
  100. do  (i.e.,  what parameters to type after the program name).
  101. First I will introduce the various possibilities by example.
  102. Then I will summarize the rules.
  103.  
  104. In  the simplest case either SQ or USQ can simply  be  given
  105. one or more file names (with or without drive names):
  106.      A>sq xyz.asm
  107.      A>sq thisfile.doc b:thatfile.doc
  108. will   create  squeezed  files  xyz.aqm,   thisfile.dqc  and
  109. thatfile.dqc,  all  on the current drive,  A.  The  original
  110. files are not disturbed. Note that the names of the squeezed
  111. files are generated by rules - you don't specify them.
  112.  
  113. Likewise,
  114.      A>usq xyz.aqm
  115. will  create file xyz.asm on the A  drive,  overwriting  the
  116. original.  (The  original name is recreated from information
  117. stored in the squeezed version.) The squeezed version is not
  118. disturbed.
  119.  
  120. Each file name is processed in order,  and you can list  all
  121. the files you can fit in a command.  The file names given to
  122. SQ and USQ must be specific. You will learn below how to use
  123. the FLS program to expand patterns like *.asm (all files  of
  124. type  asm) into a list of specific names and feed them  into
  125. SQ or USQ.
  126.  
  127. The above examples let the destination drive default to  the
  128. current logged drive, which was shown in the prompt to be A.
  129. You can change the destination drive as often as you like in
  130. the parameter list. For example,
  131.      A>sq x.asm b: y.asm z.asm c: d:s.asm
  132. will create x.aqm on the current drive,  A,  y.aqm and z.aqm
  133. on the B drive and s.aqm on the C drive. Note that the first
  134. three originals are on drive A and the last one is on  drive
  135. D.  Remember  that each parameter is processed in order,  so
  136. you must change the destination drive before you specify the
  137. files to be created on that drive.
  138.  
  139. Eventually you will have diskettes with many squeezed  files
  140. on  them and you will wonder what is in which file.  If they
  141. weren't  squeezed you would use the TYPE command to look  at
  142. the  comments at the beginning of the  files.  But  squeezed
  143. files  just  make  a mess on your CRT screen when  you  TYPE
  144. them,  so  I have provided the required feature as a preview
  145. option to the USQ program.
  146.      A>usq -10 x.bas b:y.asm
  147. will  not take the time to create unsqueezed files.  Instead
  148. it  will  unsqueeze  the first 10 lines  of  each  file  and
  149. display  them  on your console.  The display from each  file
  150. consists of the file names, the data and a formfeed (FF).
  151. Also,
  152.      A>usq - c:xyz.mac
  153. will  unsqueeze  and display the first 65,535 lines  of  any
  154. files listed. That's the biggest number you can give it, and
  155. is intended to display the whole file.
  156.  
  157. This   preview  option  also  ensures  that  the   data   is
  158. displayable.  The  parity bit is stripped off (some Wordstar
  159. files  use  it for format control) and any  unusual  control
  160. characters  are  converted to periods.  You'll see  some  of
  161. these  at  the end of the files as the CP/M end of  file  is
  162. treated  as  data  and  the  remainder  of  the  sector   is
  163. displayed.
  164.  
  165. You are now familiar with all of the operational  parameters
  166. of SQ and USQ.  But so far you have always typed them on the
  167. command line which caused the program to be run. For reasons
  168. which  will become apparent later,  I have also provided  an
  169. interactive  mode.   If  there  are  no  parameters  (except
  170. directed  i/o  parameters,  described later) on the  command
  171. line,  SQ  and USQ will prompt with an asterisk  and  accept
  172. parameters from the console keyboard. Each parameter must be
  173. followed  by  RETURN and will be processed  immediately.  An
  174. empty  command (just RETURN) will cause the program to  exit
  175. back  to  CP/M.  Try it - it will help you  understand  what
  176. follows.
  177.  
  178. Now lets get into directed i/o, which will be new to most of
  179. you,  but will save you so much work you will wonder how you
  180. ever got along without it.
  181.  
  182. Perhaps you frequently squeeze or unsqueeze the same list of
  183. files  and you would like to type the list once and be  done
  184. with it. Use an editor (or FLS, described below) to create a
  185. file  with  one  parameter per line.  For  example  call  it
  186. commands.lst.
  187.  
  188. Then,
  189. A>sq <commands.lst
  190. will  cause the command list file to be read as if you  were
  191. typing it! You will see it on the console.
  192.  
  193. That was redirected console input.  Now assume that you have
  194. a very long l